package org.framework.common.api.query;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

/**
 * 条件表达式接口
 * <p>描述: </p>
 * <p>Company: Professional</p>
 * @author chanlong(陈龙)
 * @date 2016年1月18日 下午4:51:05
 * @version 1.0.2016
 */
public interface Criterion {

	/**
	 * 查询运算符枚举类型
	 * <p>描述: </p>
	 * <p>Company: Professional</p>
	 * @author chanlong(陈龙)
	 * @date 2016年1月18日 下午4:41:42
	 * @version 1.0.2016
	 */
	public enum Operator {  
		IN,			// 符合范围
		NOT_IN,		// 不符合范围
		EQ, 		// 等于
		NE,			// 不等于
		GE,			// 大于等于
		LE,			// 小于等于
		GT,			// 大于
		LT,			// 小于
		LIKE,		// 全模糊
		LIKE_L,		// 左模糊
		LIKE_R,		// 右模糊
		IS_NULL,	// 为空
		IS_NOT_NULL,// 不为空
		BETWEEN,	// 两者之间
		AND,
		OR
    }  
	
	/**
	 * 查询值类型枚举
	 * <p>描述: </p>
	 * <p>Company: Professional</p>
	 * @author chanlong(陈龙)
	 * @date 2016年2月13日 下午1:27:43
	 * @version 1.0.2016
	 */
	public enum ValueType { 
		FLOATS,
		INTEGERS,
		STRINGS, 	// 字符串数组
		TIMES,		// 时间数组 格式为‘HH:mm:ss’
		DATES, 		// 日期数组 格式为‘yyyyy-MM-dd’
		DATETIMES 	// 日期数组 格式为‘yyyyy-MM-dd HH:mm:ss’
    } 
	
	/**
	 * .
	 * @param root
	 * @param query
	 * @param builder
	 * @return
	 * @author chanlong(陈龙)
	 * @date 2016年1月18日 下午4:41:37
	 */
    public Predicate toPredicate(Root<?> root, CriteriaQuery<?> query,  CriteriaBuilder builder);  
}
